CrazeD Posted June 4, 2010 Share Posted June 4, 2010 So I have a mod_rewrite script that takes urls such as: site.com/page, and requests them as such: index.php?url=page. I then process that and include the page. It works perfectly. So I start another project, and like how it works, so I want to reuse it. Now it doesn't work. I completely replicated the way I did it the first time, but it doesn't work. Instead of going through index.php it just goes directly to page. I don't really understand how something works once, and then doesn't work again. <IfModule mod_rewrite.c> RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php?url=$1 [PT,L] </IfModule> $url = $_GET['url']; include ($url.'.php'); This is my test code to include the page. Pulling my hair out here. I've tried to recreate my successful script several times, even copying it line-by-line and I can't make it work again... Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/ Share on other sites More sharing options...
cags Posted June 4, 2010 Share Posted June 4, 2010 Is the file located on the same server? If mod_rewrite isn't enabled on the server, that might explain the issue. Also depending on where this information is being stored you could well have an issue with forward slashes in your code, but again this will depend somewhat on where you are writing the code. Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/#findComment-1067869 Share on other sites More sharing options...
CrazeD Posted June 5, 2010 Author Share Posted June 5, 2010 The file is located on the same server. I'm running Apache2 on Ubuntu 9.10. The one that works is setup like www/project/folder/.htaccess, index.php The one that doesn't work is setup like www/project2/.htaccess, index.php They both are the exact same file. With the same code in index.php. Both implementations have the same file permissions. index.php and .htaccess are 0777. Also, if the page I'm requesting contains PHP, it tries to download it. I hate stupid problems... Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/#findComment-1068029 Share on other sites More sharing options...
cags Posted June 5, 2010 Share Posted June 5, 2010 It sounds like your vhost/Apache isn't configured correctly. If it is downloading the php files this would seem to indicate that you do not have... AddType application/x-httpd-php .php ...specified. Generally speaking this would be placed in the httpd.conf file, perhaps you have it within the vhost section for project, but not for project2? Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/#findComment-1068159 Share on other sites More sharing options...
CrazeD Posted June 5, 2010 Author Share Posted June 5, 2010 No, because it only behaves this way if the .htaccess file is present. If I get rid of it, my PHP works just fine. I will post my apache2.conf though just so you can check it. # # Based upon the NCSA server configuration files originally by Rob McCool. # # This is the main Apache server configuration file. It contains the # configuration directives that give the server its instructions. # See http://httpd.apache.org/docs/2.2/ for detailed information about # the directives. # # Do NOT simply read the instructions in here without understanding # what they do. They're here only as hints or reminders. If you are unsure # consult the online docs. You have been warned. # # The configuration directives are grouped into three basic sections: # 1. Directives that control the operation of the Apache server process as a # whole (the 'global environment'). # 2. Directives that define the parameters of the 'main' or 'default' server, # which responds to requests that aren't handled by a virtual host. # These directives also provide default values for the settings # of all virtual hosts. # 3. Settings for virtual hosts, which allow Web requests to be sent to # different IP addresses or hostnames and have them handled by the # same Apache server process. # # Configuration and logfile names: If the filenames you specify for many # of the server's control files begin with "/" (or "drive:/" for Win32), the # server will use that explicit path. If the filenames do *not* begin # with "/", the value of ServerRoot is prepended -- so "/var/log/apache2/foo.log" # with ServerRoot set to "" will be interpreted by the # server as "//var/log/apache2/foo.log". # ### Section 1: Global Environment # # The directives in this section affect the overall operation of Apache, # such as the number of concurrent requests it can handle or where it # can find its configuration files. # # # ServerRoot: The top of the directory tree under which the server's # configuration, error, and log files are kept. # # NOTE! If you intend to place this on an NFS (or otherwise network) # mounted filesystem then please read the LockFile documentation (available # at <URL:http://httpd.apache.org/docs-2.1/mod/mpm_common.html#lockfile>); # you will save yourself a lot of trouble. # # Do NOT add a slash at the end of the directory path. # ServerRoot "/etc/apache2" # # The accept serialization lock file MUST BE STORED ON A LOCAL DISK. # #<IfModule !mpm_winnt.c> #<IfModule !mpm_netware.c> LockFile /var/lock/apache2/accept.lock #</IfModule> #</IfModule> # # PidFile: The file in which the server should record its process # identification number when it starts. # This needs to be set in /etc/apache2/envvars # PidFile ${APACHE_PID_FILE} # # Timeout: The number of seconds before receives and sends time out. # Timeout 300 # # KeepAlive: Whether or not to allow persistent connections (more than # one request per connection). Set to "Off" to deactivate. # KeepAlive On # # MaxKeepAliveRequests: The maximum number of requests to allow # during a persistent connection. Set to 0 to allow an unlimited amount. # We recommend you leave this number high, for maximum performance. # MaxKeepAliveRequests 100 # # KeepAliveTimeout: Number of seconds to wait for the next request from the # same client on the same connection. # KeepAliveTimeout 15 ## ## Server-Pool Size Regulation (MPM specific) ## # prefork MPM # StartServers: number of server processes to start # MinSpareServers: minimum number of server processes which are kept spare # MaxSpareServers: maximum number of server processes which are kept spare # MaxClients: maximum number of server processes allowed to start # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule mpm_prefork_module> StartServers 5 MinSpareServers 5 MaxSpareServers 10 MaxClients 150 MaxRequestsPerChild 0 </IfModule> # worker MPM # StartServers: initial number of server processes to start # MaxClients: maximum number of simultaneous client connections # MinSpareThreads: minimum number of worker threads which are kept spare # MaxSpareThreads: maximum number of worker threads which are kept spare # ThreadsPerChild: constant number of worker threads in each server process # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule mpm_worker_module> StartServers 2 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxClients 150 MaxRequestsPerChild 0 </IfModule> # event MPM # StartServers: initial number of server processes to start # MaxClients: maximum number of simultaneous client connections # MinSpareThreads: minimum number of worker threads which are kept spare # MaxSpareThreads: maximum number of worker threads which are kept spare # ThreadsPerChild: constant number of worker threads in each server process # MaxRequestsPerChild: maximum number of requests a server process serves <IfModule mpm_event_module> StartServers 2 MaxClients 150 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestsPerChild 0 </IfModule> # These need to be set in /etc/apache2/envvars User ${APACHE_RUN_USER} Group ${APACHE_RUN_GROUP} # # AccessFileName: The name of the file to look for in each directory # for additional configuration directives. See also the AllowOverride # directive. # AccessFileName .htaccess # # The following lines prevent .htaccess and .htpasswd files from being # viewed by Web clients. # <Files ~ "^\.ht"> Order allow,deny Deny from all </Files> # # DefaultType is the default MIME type the server will use for a document # if it cannot otherwise determine one, such as from filename extensions. # If your server contains mostly text or HTML documents, "text/plain" is # a good value. If most of your content is binary, such as applications # or images, you may want to use "application/octet-stream" instead to # keep browsers from trying to display binary files as though they are # text. # DefaultType text/plain # # HostnameLookups: Log the names of clients or just their IP addresses # e.g., www.apache.org (on) or 204.62.129.132 (off). # The default is off because it'd be overall better for the net if people # had to knowingly turn this feature on, since enabling it means that # each client request will result in AT LEAST one lookup request to the # nameserver. # HostnameLookups Off # ErrorLog: The location of the error log file. # If you do not specify an ErrorLog directive within a <VirtualHost> # container, error messages relating to that virtual host will be # logged here. If you *do* define an error logfile for a <VirtualHost> # container, that host's errors will be logged there and not here. # ErrorLog /var/log/apache2/error.log # # LogLevel: Control the number of messages logged to the error_log. # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. # LogLevel warn # Include module configuration: Include /etc/apache2/mods-enabled/*.load Include /etc/apache2/mods-enabled/*.conf # Include all the user configurations: Include /etc/apache2/httpd.conf # Include ports listing Include /etc/apache2/ports.conf # # The following directives define some format nicknames for use with # a CustomLog directive (see below). # If you are behind a reverse proxy, you might want to change %h into %{X-Forwarded-For}i # LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined LogFormat "%h %l %u %t \"%r\" %>s %O" common LogFormat "%{Referer}i -> %U" referer LogFormat "%{User-agent}i" agent # # Define an access log for VirtualHosts that don't define their own logfile CustomLog /var/log/apache2/other_vhosts_access.log vhost_combined # Include of directories ignores editors' and dpkg's backup files, # see README.Debian for details. # Include generic snippets of statements Include /etc/apache2/conf.d/ # Include the virtual host configurations: Include /etc/apache2/sites-enabled/ And my sites-available/default: <VirtualHost *:80> ServerAdmin webmaster@localhost DocumentRoot /var/www <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /var/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride All Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel warn CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride All Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost> Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/#findComment-1068198 Share on other sites More sharing options...
cags Posted June 5, 2010 Share Posted June 5, 2010 I don't think it will make a difference, but try adding... Options +followsymlinks ...at the top of your .htaccess. Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/#findComment-1068215 Share on other sites More sharing options...
CrazeD Posted June 5, 2010 Author Share Posted June 5, 2010 No difference. I just don't understand how it can work once but not twice. :/ Also, just to note, I uploaded my uncompleted project (the one that works) to my webserver just to test the implementation, and it works perfectly there too. So I'm guessing it has something to do with my server setup. Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/#findComment-1068321 Share on other sites More sharing options...
cags Posted June 6, 2010 Share Posted June 6, 2010 Yes, that is almost certainly the case, but I can't personally see anything in your settings. Though I'm certainly no Apache expert. Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/#findComment-1068514 Share on other sites More sharing options...
CrazeD Posted June 6, 2010 Author Share Posted June 6, 2010 I think the issue may lie in the fact that this is my first Linux server that I've managed. I'm sure I'm doing some noobie thing wrong. :/ I have other Windows installations and I tested my .htaccess and it works every time there. I just can't figure it out...sigh. All my conf's match that of the Windows, and I've done everything based on guides on the net. :cryface: Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/#findComment-1068564 Share on other sites More sharing options...
premiso Posted June 6, 2010 Share Posted June 6, 2010 Chances are in your vhost / apache settings you have MultiViews set somewhere under the options. http://httpd.apache.org/docs/1.3/content-negotiation.html Basically it tries to correct urls itself and this is why it goes to page.php instead of being filtered through htaccess / index.php. [ot]You should not include php files like you have done, this can easily be used to exploit your server. IE: include($url . ".php"); should not be used.[/ot] Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/#findComment-1068617 Share on other sites More sharing options...
CrazeD Posted June 7, 2010 Author Share Posted June 7, 2010 Chances are in your vhost / apache settings you have MultiViews set somewhere under the options. http://httpd.apache.org/docs/1.3/content-negotiation.html Basically it tries to correct urls itself and this is why it goes to page.php instead of being filtered through htaccess / index.php. [ot]You should not include php files like you have done, this can easily be used to exploit your server. IE: include($url . ".php"); should not be used.[/ot] THANK YOU!!! You were right, I had MultiViews in my sites-available/default, so I took them out and it worked right away. Thanks a bunch. And yes that page include was only to test my .htaccess, of course. Quote Link to comment https://forums.phpfreaks.com/topic/203880-my-rewrite-works-but-cant-be-replicated/#findComment-1068788 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.