htaccess从url中删除index.php

时间:2010-12-06 09:54:08

标签: apache .htaccess mod-rewrite

我遇到一个问题,即google使用错误的网址索引某些网页。

他们正在编制索引的网址是:

http://www.example.com/index.php/section1/section2

我需要它重定向到:

http://www.example.com/section1/section2

.htaccess不是我的强项,所以任何帮助都会非常感激。

提前致谢。

12 个答案:

答案 0 :(得分:56)

这是从网址隐藏index.php的基本规则。将其放在根.htaccess文件中。

必须使用PHP启用

mod_rewrite,这适用于高于5.2.6的PHP版本。

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php?/$1 [L]

答案 1 :(得分:44)

要从网址中删除index.php,并将访问者重定向到该网页的非index.php版本:

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

这会将/index.php/myblog干净地重定向到/myblog

使用301重定向将保留Google搜索引擎排名。

答案 2 :(得分:17)

RewriteEngine On
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /(.*)index\.php($|\ |\?)
RewriteRule ^ /%1 [R=301,L]

答案 3 :(得分:8)

假设现有的网址是

http://example.com/index.php/foo/bar

我们希望将其转换为

 http://example.com/foo/bar

您可以使用以下规则:

RewriteEngine on
#1) redirect the client from "/index.php/foo/bar" to "/foo/bar"
RewriteCond %{THE_REQUEST} /index\.php/(.+)\sHTTP [NC]
RewriteRule ^ /%1 [NE,L,R]
#2)internally map "/foo/bar" to "/index.php/foo/bar"
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ /index.php/$1 [L]

在spep#1中,我们首先匹配请求字符串并捕获 /index.php / 之后的所有内容,捕获的值保存在%1 var中。然后我们将浏览器发送到新的URL。 #2在内部处理请求。当浏览器到达 / foo / bar 时,#2rule会将新网址重写到orignal位置。

答案 4 :(得分:5)

执行以下步骤

1。确保托管/您的pc mod_rewrite模块处于活动状态。如果不活动则尝试以某种方式激活,打开httpd.conf文件。你可以在phpinfo.php中查看这个来查找。

更改此设置:

#LoadModule rewrite_module modules/mod_rewrite.so

要重启wamp

LoadModule rewrite_module modules/mod_rewrite.so

2. 然后转到.htaccess文件,并尝试修改为:

RewriteEngine On

RewriteBase /

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)\?*$ index.php/$1 [L,QSA]

如果以上不起作用请尝试使用此功能:

RewriteEngine on

# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

# otherwise forward it to index.php
RewriteRule . index.php

3. 将.htaccess文件移动到根目录,其中是index.php。

www OR root folder
- index.php
- .htaccess

答案 5 :(得分:3)

从wordl网站的网址中删除index.php的步骤。

  1. 检查您的服务器是否应启用mod_rewrite。 检查是否已启用 - 使用以下命令在根文件夹中创建1个文件phpinfo.php。
  2.   <?php
        phpinfo?();
      ?>
    

    现在运行此文件 - www.yoursite.com/phpinfo.php,它将在Load modules部分显示mod_rewrite。 如果未启用,则在终端上执行以下命令。

    sudo a2enmod rewrite
    sudo service apache2 restart
    
    1. 确保您的.htaccess存在于您的WordPress根文件夹中,如果没有创建一个.htaccess文件 将此代码粘贴到.htaccess文件中: -
    2.  <IfModule mod_rewrite.c>
          RewriteEngine On
          RewriteBase /
          RewriteRule ^index\.php$ - [L]
          RewriteCond %{REQUEST_FILENAME} !-f
          RewriteCond %{REQUEST_FILENAME} !-d
          RewriteRule . /index.php [L]
          </IfModule>
      
      1. 进一步允许.htaccess到666以便它变得可写,现在你可以对你的wordpress永久链接进行更改。

      2. 现在转到设置 - &gt;永久链接 - &gt;并更改为您需要的网址格式。 删除此代码/index.php/%year%/%monthnum%/%day%/%postname%/ 并在自定义结构上插入此代码:/%postname%/

      3. 如果仍未成功,请检查您的托管,我的是digitalocean服务器,所以我自己清除了

      4. 编辑文件/etc/apache2/sites-enabled/000-default.conf

        在DocumentRoot / var / www / html

        之后添加了这一行
            <Directory /var/www/html>
            AllowOverride All
            </Directory>
        

        重新启动Apache服务器

        注意:/ var / www / html将是您的文档根目录

答案 6 :(得分:0)

有些人可能会使用mod_rewrite使用上面列出的方法获得403。重现index.php的另一种解决方案如下:

<IfModule mod_rewrite.c> 

RewriteEngine On

# Put your installation directory here:
RewriteBase /

# Do not enable rewriting for files or directories that exist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

</IfModule> 

答案 7 :(得分:0)

这将起作用,在.htaccess文件中使用以下代码     RewriteEngine开启

# Send would-be 404 requests to Craft
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !^/(favicon\.ico|apple-touch-icon.*\.png)$ [NC]
RewriteRule (.+) index.php?p=$1 [QSA,L]

答案 8 :(得分:0)

For more information and codeigniter tutorial

在项目根目录上创建.htaccess文件,并在下面的代码中删除index.php

  RewriteEngine on
  RewriteCond $1 !^(index.php|resources|robots.txt)
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php/$1 [L,QSA]

答案 9 :(得分:0)

我已使用上述部分中的许多代码从基本URL中删除index.php。但这并没有从我的目的开始。因此,您可以使用我使用过的此代码,并且它可以正常工作。

如果您确实需要从基本URL中删除index.php,则只需将此代码放在htaccess中即可。

RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]

RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,NE,L]

答案 10 :(得分:0)

我不需要大量代码就可以为我解决这个问题。

我有 https://example.com/entitlements/index.php ,但我希望任何键入它的人在输入 {{3} } 由于包含 index 这个词,因此您仍然会收到错误消息,尽管 index.php 的内容仍会正确显示,但始终会抛出错误

大臣在“ https://example.com/entitlements/index”上的帖子 解决了

使用以下内容编辑您的.htaccess文件 将访问https://stackoverflow.com/a/1055655/12192635的人重定向到404页

RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/
RewriteRule ^.*$ - [R=404,L]

将访问https://example.com/entitlements/index.php的人重定向到404页

RewriteCond %{THE_REQUEST} \index[\ /?].*HTTP/
RewriteRule ^.*$ - [R=404,L]

尽管如此,我们已经知道上面的代码可以与堆栈上已经存在的代码一起使用,请参阅我在哪里将所有上面的代码应用到最后。

# The following will allow you to use URLs such as the following:
#
#   example.com/anything
#   example.com/anything/
#
# Which will actually serve files such as the following:
#
#   example.com/anything.html
#   example.com/anything.php
#
# But *only if they exist*, otherwise it will report the usual 404 error.

Options +FollowSymLinks
RewriteEngine On

# Remove trailing slashes.
# e.g. example.com/foo/ will redirect to example.com/foo
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.+)/$ /$1 [R=permanent,QSA]

# Redirect to HTML if it exists.
# e.g. example.com/foo will display the contents of example.com/foo.html
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.html -f
RewriteRule ^(.+)$ $1.html [L,QSA]

# Redirect to PHP if it exists.
# e.g. example.com/foo will display the contents of example.com/foo.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}.php -f
RewriteRule ^(.+)$ $1.php [L,QSA]

RewriteCond %{THE_REQUEST} \.php[\ /?].*HTTP/
RewriteRule ^.*$ - [R=404,L]

RewriteCond %{THE_REQUEST} \index[\ /?].*HTTP/
RewriteRule ^.*$ - [R=404,L]

答案 11 :(得分:0)

试试这个,它对我有用

<IfModule mod_rewrite.c>

# Enable Rewrite Engine
# ------------------------------
RewriteEngine On
RewriteBase /

# Redirect index.php Requests
# ------------------------------
RewriteCond %{THE_REQUEST} ^GET.*index\.php [NC]
RewriteCond %{THE_REQUEST} !/system/.*
RewriteRule (.*?)index\.php/*(.*) /$1$2 [R=301,L]

# Standard ExpressionEngine Rewrite
# ------------------------------
RewriteCond $1 !\.(css|js|gif|jpe?g|png) [NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.php/$1 [L]

</IfModule>