我有一个名为test,http://www.mywebsite.com/test/的子目录。目录内部是index.php文件。
我想将.htaccess文件放在test子目录中,该子目录将重写URL,以便http://www.mywesbite.com/test/paul成为http://www.mywebsite.com/test?author=paul,以便http://www.mywebsite.ocom/test/sam/3之类的网址成为{{} 3}}
这是我到目前为止所做的:
RewriteEngine On
Options +FollowSymlinks
RewriteCond %{REQUEST_URI} (/test/)
RewriteRule ^(.*)/(.*)/(.*)/?$ /test/index.php?author=$1&page=$2 [L]
RewriteCond %{REQUEST_URI} (/test/)
RewriteRule ^(.*)/(.*)/?$ /test/index.php?author=$1 [L]
不幸的是,我收到404 Not Found错误。我错过了什么吗?任何想法都非常感谢!
编辑:我检查了phpinfo(),并且mod_rewrite似乎显示为已加载的模块。
这也是我的虚拟主机文件的样子。看起来也设置了AllowOverride。
<VirtualHost *:80>
ServerName mywebsite.com
ServerAlias www.mywebsite.com
DocumentRoot /var/www/html/mywebsite.com/httpdocs
ErrorLog /var/log/apache2/mywebsite.com-error_log
CustomLog /var/log/apache2/mywebsite.com-access_log combined
HostnameLookups Off
UseCanonicalName Off
ServerSignature On
ScriptAlias /cgi-bin/ "/var/www/html/mywebsite.com/httpdocs/"
<Directory "/var/www/html/mywebsite.com/httpdocs/">
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
<IfModule mod_userdir.c>
UserDir public_html
Include /etc/apache2/mod_userdir.conf
</IfModule>
</VirtualHost>
编辑2 :我还想提一下,我在.htaccess文件中放了一些垃圾文本试图打破它,而不是404错误我得到了一个内部服务器错误,所以它看起来好像正在读取.htaccess文件。
答案 0 :(得分:3)
我测试了巴拿马杰克的解决方案,似乎RewriteRules并没有考虑到这已经存在于/test/.htaccess中...所以这对第一个例子(/ test / paul)不起作用。提出一个适用于这两个示例的替代解决方案:
RewriteEngine On
RewriteBase /test/
RewriteRule ^(.+)/(.+)/?$ index.php?author=$1&page=$2 [L]
RewriteCond %{REQUEST_URI} !index\.php$
RewriteRule ^(.+)/?$ index.php?author=$1 [L]