将子目录网址重写为文件

时间:2016-02-16 22:42:56

标签: php apache .htaccess mod-rewrite

我有一个名为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文件。

1 个答案:

答案 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]