.htaccess重写规则即使经过所有必要的更改也无法正常工作

时间:2014-07-29 16:20:46

标签: php apache .htaccess mod-rewrite url-rewriting

现在为我的网站夫妇提供重写规则,但未成功完成。 google了很多,并在stackoverflow中找到了一些非常重要的主题,特别是 this one 。我已经做了网上提到的所有更改。在我谈到我对httpd.conf所做的更改之前,我希望分享我wamp的目录结构

我网站的根目录是 C:/wamp/www/dist 。我的网站的index.php.htaccess个文件保存在此 dist 文件夹中,还有其他网站的子目录。< / p>

我的变化::

wamp --> Apache --> Apache modules --> rewrite_module检查了

       ----------------IN MY APACHE httpd.conf file----------------

 LoadModule rewrite_module modules/mod_rewrite.so //removed # sign from it

 <Directory />
      Options FollowSymLinks
      AllowOverride All
      Order allow,deny
      Allow from all
  </Directory>

  <Directory "c:/wamp/www/">
      Options Indexes FollowSymLinks
      AllowOverride all
      Order Allow,Deny
      Allow from all
  </Directory>

  <Directory "c:/wamp/www/dist/">
     Options Indexes FollowSymLinks MultiViews
     AllowOverride all
     Order allow,deny
     Allow from all
  </Directory>

现在我在 .htaccess 中创建了一个C:/wamp/www/dist文件(index.php也在这里)

所以我的.htaccess看起来像

<IfModule mod_rewrite.c>
     Options +FollowSymLinks
     RewriteEngine On
     RewriteBase /dist/
     RewriteRule ^([^/]*)\.html$ /dist/?path=$1
</IfModule>

结果/错误:: 它不起作用网址与之前相同(丑陋)。网址没有变化。

错误解释:: 从我在其他子目录中的任何页面发送请求到我的index.php看起来像http://localhost/dist/?path=home并且在检查路径变量的值之后index.php包含必要的文件。所以我想将我的网址设为http://localhost/dist/home。但正如我所说它不起作用。我的网址仍然存在 创建 http://localhost/dist/?path=home 文件

.htaccess

注1 :: 我检查了 phpinfo() 模块已加载。

注意2 :: 我尝试从<IfModule mod_rewrite.c>删除.htaccess,但它没有任何效果再次相同

1 个答案:

答案 0 :(得分:1)

保持/dist/.htaccess像这样:

DirectorySlash Off
Options +FollowSymLinks -MultiViews
RewriteEngine On
RewriteBase /dist/

# Use %{THE_REQUEST} to make an external redirect from /dist/?path=home to /dist/home
RewriteCond %{THE_REQUEST} \?path=([^\s&]+)\s [NC]
RewriteRule ^ %1? [R=302,L,NE]

## internal rewrite from /dist/home to /dist/?path=home
# not a file
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^([^/]+)/?$ ?path=$1 [L,QSA]
  • THE_REQUEST变量表示Apache从您的浏览器收到的原始请求,并且在执行某些重写规则后不会被覆盖。此变量的示例值为GET /index.php?id=123 HTTP/1.1
  • QSA(查询字符串追加)标记在添加新查询参数时保留现有查询参数。

参考:Apache mod_rewrite Introduction