标签: mod-rewrite

是否可以不使用 mod_rewrite 删除 .php 扩展名?

我正在为客户管理一个电子商务网站,该网站是使用 Apache 上的 JShop 构建的。出于 SEO 的原因,链接类似于:

http://www.domain.com/shop/section/3151/1/flowers
http://www.domain.com/shop/product/35465/blueflower
Run Code Online (Sandbox Code Playgroud)

映射到:

http://www.domain.com/shop/section.php/3151/1/flowers
http://www.domain.com/shop/product.php/35465/blueflower
Run Code Online (Sandbox Code Playgroud)

提供与以下相同的页面:

http://www.domain.com/shop/section.php?xSec=3151&xPage=1
http://www.domain.com/shop/product.php?xSec=35465
Run Code Online (Sandbox Code Playgroud)

不知何故,这是在没有mod_rewrite 的情况下实现的(我已经通过禁用 mod_rewrite 并注释掉所有 conf 和 .htaccess 文件中的所有重写规则来确认这一点)。

注意:文件 section.php 和 product.php 存在,但 section 和 product 不存在,也没有符号链接。

问题是在生产服务器上这种行为停止发生。在我的开发服务器上它仍然有效。我能够通过使用 mod_rewrite 使生产服务器再次正常工作,因为这是我知道如何做到这一点的唯一方法。但是,我真的需要首先知道生产服务器上发生了什么变化,以便我可以正确理解问题(以避免其他不可预见的后果)。我已经重新启动了 Apache 并撤消了在 URL 损坏时我在生产服务器上所做的所有更改。它们仍然被破坏(没有我的新重写规则)。

除了mod_rewrite之外,还有哪些方法可用于从 URL 中删除 .php 扩展名?

php mod-rewrite seo .htaccess apache-2.2

1
推荐指数
1
解决办法
3230
查看次数

Apache:mod-rewrite 在另一个目录中查找丢失的图像

我是 Apache mod 重写的新手。我想达到的就是这个。

如果从 url 请求图像 (gif, jpg, png) 并且在那里找不到,它应该自动尝试从另一个目录传递此图像。

mod-rewrite apache-2.2

1
推荐指数
1
解决办法
3578
查看次数

Apache 410 Gone 指令不适用于 mod_alias 和 mod_rewrite

Apache 2.2(在运行 cPanel 的服务器上)似乎忽略了返回 410 状态的指令。

这发生在 mod_alias 的 Redirect(使用410gone)和 mod_rewrite 的 RewriteRule(使用[G]),在 .htaccess 文件中使用。

这有效:

Redirect 302 /somewhere /gone
Run Code Online (Sandbox Code Playgroud)

但这不会:

Redirect 410 /somewhere
Run Code Online (Sandbox Code Playgroud)

该行将被忽略(就像它已被注释一样)并且请求会落入其他规则(将其定向到不相关的通用错误处理脚本)。

类似地,尝试使用带有 [G] 标志的 RewriteRule 不起作用,但是将相同的规则重写为生成 410 的脚本可以 - 所以规则不是问题,它似乎是关于 410/没有表现。

我可以通过让脚本发送 410 来解决它,但这很烦人,我不明白为什么它不起作用。

有任何想法吗?

mod-rewrite mod-alias apache-2.2

1
推荐指数
1
解决办法
1795
查看次数

如何添加额外的 RewriteCond 来排除特定的 url?

我有一个现有的 .htaccess 文件,其重写条件如下:

RewriteCond %{HTTP_HOST} !^go\.domain\.com$ [NC] 
RewriteRule ^(.*)$ https://go.domain.com [R,L]
Run Code Online (Sandbox Code Playgroud)

本质上,该域上的所有内容都被强制转移到go子域。

然而,有一个网址我想保留原样,而不是重写:

www.domain.com/terms
Run Code Online (Sandbox Code Playgroud)

如何添加额外的 RewriteCond 以排除此特定 url?

mod-rewrite .htaccess apache-2.2

1
推荐指数
1
解决办法
1万
查看次数

如何防止 mod_rewrite 解码路径中的字符串?

我正在尝试使用 mod_rewrite 创建一个宁静的 API。

我有一个规则:

RewriteRule v2/(.*)$ v1/index.php?request=$1 [QSA,NC,L]
Run Code Online (Sandbox Code Playgroud)

然而,路径可能包含 base64 编码的字符串(即可以有 + 或 /)并且它们在到达 PHP 之前被解码。

例如,如果我去

/v2/cards/9VwQLli%2Bf0ogFl19AVRFLuztbp8cP0rYCgXBu3H9%2BDc%3DBe
Run Code Online (Sandbox Code Playgroud)

PHP 获取$_REQUEST['request']cards/9VwQLli f0ogFl19AVRFLuztbp8cP0rYCgXBu3H9 Dc=Be'.

更糟糕的是,如果我在其中添加斜杠(例如9VwQLli%2Bf0ogFl19AVRFLuztbp8c%2FP0rYCgXBu3H9%2BDc%3DBe-%2F是斜杠),我会得到 404。

我怎样才能防止这种情况发生?

注意:我尝试了BNE标志,但它们没有任何效果。我想作为一个黑客,我可以将所有+字符_都转换/-,或者甚至是双 url 编码,但我想知道是否有更好的方法。

php mod-rewrite rewrite encoding apache-2.2

1
推荐指数
1
解决办法
2892
查看次数

Apache2 中的 .htaccess 用于 php url

我想任何URL映射如localhost/firstlocalhost/first.php在Ubuntu 15.04使用mod_rewrite为Apache。

以下是步骤。

  1. 使用 (apt-get apache2, php5) 安装 Apache2、PHP5 在 Apache 中启用 PHP,因此phpinfo()打印正确的信息。
  2. a2enmod 重写,重启 apache
  3. /etc/apache2/sites-enabled/000-default.conf,在适当的地方添加了以下内容。

    <VirtualHost *:80>
        <Directory /var/www/html>
            Options Indexes FollowSymLinks MultiViews
            AllowOverride All
            Order allow,deny
            allow from all
        </Directory>
    </VirtualHost>
    -- Restart Apache
    
    Run Code Online (Sandbox Code Playgroud)
  4. .htaccess/var/www/html

    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^([^\.]+)$ $1.php [NC,L]
    
    Run Code Online (Sandbox Code Playgroud)
  5. chmod 644 /var/www/html/.htaccess

  6. 重启阿帕奇

但是像/localhost/second这样的请求不会转换为second.php.

  1. 已编辑.htaccess,将最后一行更改为RewriteRule ^second$ second.php. 然而没有成功。

  2. 在 Apache …

mod-rewrite .htaccess apache2

1
推荐指数
1
解决办法
635
查看次数

我如何确定是否安装了用于 Apache 的 mod_rewrite

我在 Suse 机器上安装了 Apache 2。我浏览了它的配置文件,检查了 Yast 中安装了哪些模块,甚至尝试在 .htaccess 中编写一个不起作用的重写规则。我似乎无法在任何地方找到 mod_rewrite。

我认为这意味着没有安装 mod_rewrite 吗?我怎样才能确定?

mod-rewrite apache-2.2

0
推荐指数
1
解决办法
181
查看次数

Apache:重写规则以从永久链接中删除斜杠?

在 ServerFault 上看到过这个上一个问题,我想要类似的东西,但我不确定如何完成它。

我想要的是从永久链接中删除所有斜杠,除了域名后面的斜杠。例如:

http://www.muycomputerpro.com/Actualidad/Especiales/La-Ciudad-Eficiente-Netapp

将被重定向到

http://www.muycomputerpro.com/ActualidadEspecialesLa-Ciudad-Eficiente-Netapp

我需要它来纠正Apache Web 服务器我的 WordPress 博客上剩余的一些 404 错误。那么,正确的重写规则是什么?

mod-rewrite wordpress permalinks apache-2.2

0
推荐指数
1
解决办法
911
查看次数

如何增加 EXT3 上的文件名大小限制(在 ubuntu 上)

文件名在 EXT3 上的默认长度限制为 255 个字符。我有一个独特的要求,我需要更长的文件名(显然是因为 apache 的 mod_rewrite 使用文件名进行存储)。是否有任何设置我可以调整以将这个限制从 255 个字符增加?(或者,如果我可以更改 mod_rewrite 设置以不使用文件)

linux ubuntu mod-rewrite ext3

0
推荐指数
1
解决办法
6665
查看次数

在 .htacess 中启用 ReWriteLog 后,我无法打开我的网站。

.htaccess 起初运行良好,然后我在 .htacess 中添加了两行以启用 RewriteLog。结果是我无法打开我的网站。

我添加到我的 .htaccess 中的两行如下:

RewriteLog /home/bigmeow/mylog/rewrite.log
RewriteLogLevel 9
Run Code Online (Sandbox Code Playgroud)

启用 rewritelog 的 .htaccess 如下:

less .htaccess
RewriteEngine On
RewriteBase /blog/
RewriteLog /home/bigmeow/mylog/rewrite.log
RewriteLogLevel 9
RewriteRule ^index\.php$ - [L]

# uploaded files
RewriteRule ^([_0-9a-zA-Z-]+/)?files/(.+) wp-includes/ms-files.php?file=$2 [L]

# add a trailing slash to /wp-admin
RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L]

RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule ^[_0-9a-zA-Z-]+/(wp-(content|admin|includes).*) $1 [L]
RewriteRule ^[_0-9a-zA-Z-]+/(.*\.php)$ $1 [L]
RewriteRule . index.php [L]
Run Code Online (Sandbox Code Playgroud)

当我尝试打开我的网站时收到的错误消息:

Internal Server Error

The server encountered an …
Run Code Online (Sandbox Code Playgroud)

mod-rewrite httpd .htaccess wordpress apache-2.2

0
推荐指数
1
解决办法
1794
查看次数

Apache 重写规则添加了 2 个多余的斜线

我想在 apache2.2 中使用谷歌友好的 301 将所有 www 重定向到非 www

它基本上可以工作,但是当我在浏览器中输入 www.test.net 时,我被重定向到 test.net// 并且我希望没有双斜杠。

这是在我的 VHOST 中:

RewriteCond %{HTTP_HOST} ^www.test.net [NC]
RewriteRule ^(.*)$ http://test.net/$1 [L,R=301]
Run Code Online (Sandbox Code Playgroud)

编辑:更糟糕的是:

浏览器中的 www.test.net/home 被重定向到 test.net//home

mod-rewrite apache-2.2

0
推荐指数
1
解决办法
1870
查看次数

htaccess 将 HTTP 和 HTTPS 非 www 重定向到 HTTPS www

如何将我的网站从所有 HTTP 请求重定向到 HTTPS,并将非 www HTTPS 重定向到带有 www 的 HTTPS?

例子:

重定向 HTTP 非 www、HTTP www。& HTTPS 非 www:

HTTP://example.com/&& HTTP://www.example.com/&&HTTPS://example.com/

带有 www. 的 HTTPS 的所有内容:

HTTPS://www.example.com/

mod-rewrite .htaccess redirect

0
推荐指数
1
解决办法
1万
查看次数

HTTP 到 HTTPS 重定向不适用于 Apache 2.4

我有这个 apache 配置:

<VirtualHost *:80>
DocumentRoot "/home/example/public_html/"
ServerName www.example.com

<Directory "/home/example/public_html/">
  allow from all

  RewriteEngine on
  RewriteRule ^(.*)$ https://www.example.com/$1 [R=301,L]
</Directory>
</VirtualHost>
Run Code Online (Sandbox Code Playgroud)

重定向似乎永远不会触发,只是从 http 提供文件。我尝试了各种组合,但似乎没有任何效果。

mod_rewrite 已启用(使用 LoadModule rewrite_module modules/mod_rewrite.so)

任何人都可以帮忙吗?

mod-rewrite https apache-2.4

0
推荐指数
1
解决办法
9803
查看次数